package santeclair.referentiel.optique.referentiel.dao.impl;

import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;

import org.springframework.stereotype.Repository;

import santeclair.lunar.framework.dao.jpa.exception.JpaExceptionHelper;
import santeclair.lunar.framework.dao.jpa.impl.FwkCodeJpaDAO;
import santeclair.referentiel.optique.config.Constant;
import santeclair.referentiel.optique.model.FournisseurOptique;
import santeclair.referentiel.optique.referentiel.dao.FournisseurOptiqueDAO;

@Repository
public class FournisseurOptiqueDAOImpl extends FwkCodeJpaDAO<FournisseurOptique, String> implements FournisseurOptiqueDAO {
    @PersistenceContext(unitName = Constant.PERSISTENCE_UNIT_NAME)
    private EntityManager em;

    @Override
    public Class<FournisseurOptique> getEntityClass() {
        return FournisseurOptique.class;
    }

    @Override
    public EntityManager getEntityManager() {
        return em;
    }

    @Override
    public FournisseurOptique getFournisseurOptiqueByCodeOpto(String codeOpto10) {

        StringBuffer sbf = new StringBuffer();
        sbf.append("SELECT fournisseuroptique ");
        sbf.append("FROM FournisseurOptique fournisseuroptique ");
        sbf.append("WHERE :fournisseurCodeopto = codeOpto10FournisseurOptique ");

        TypedQuery<FournisseurOptique> query = em.createQuery(sbf.toString(), FournisseurOptique.class);
        query.setParameter("fournisseurCodeopto", codeOpto10);

        try {
            return query.getSingleResult();
        } catch (NoResultException nre) {
            throw JpaExceptionHelper.addQueryInformation(sbf.toString(), query, nre, NoResultException.class);
        }
    }

}
